/**
* @license
* Copyright (c) 2014, 2018, Oracle and/or its affiliates.
* The Universal Permissive License (UPL), Version 1.0
*/
"use strict";define(["ojs/ojcore","jquery","ojs/ojcomponentcore","promise"],function(e,t){var i={properties:{arrowPlacement:{type:"string",enumValues:["adjacent","overlay"],value:"adjacent"},arrowVisibility:{type:"string",enumValues:["auto","hidden","hover","visible"],value:"auto"},currentItem:{type:"object",writeback:!0,value:{index:0},properties:{id:{type:"string"},index:{type:"number"}}},looping:{type:"string",enumValues:["off","page"],value:"off"},maxItemsPerPage:{type:"number",value:0},orientation:{type:"string",enumValues:["horizontal","vertical"],value:"horizontal"},translations:{type:"object",value:{},properties:{labelAccArrowNextPage:{type:"string"},labelAccArrowPreviousPage:{type:"string"},labelAccFilmStrip:{type:"string"},tipArrowNextPage:{type:"string"},tipArrowPreviousPage:{type:"string"}}}},methods:{refresh:{},getItemsPerPage:{},getPagingModel:{},setProperty:{},getProperty:{},setProperties:{},getNodeBySubId:{},getSubIdByNode:{}},extension:{}};e.FilmStripPagingModel=function(){this.Init()},e.Object.createSubclass(e.FilmStripPagingModel,e.EventSource,"oj.FilmStripPagingModel"),e.FilmStripPagingModel.prototype.Init=function(){e.FilmStripPagingModel.superclass.Init.call(this),this._page=-1,this._totalSize=0,this._pageSize=-1},e.FilmStripPagingModel.prototype.setTotalSize=function(e){this._totalSize=e},e.FilmStripPagingModel.prototype.getPageSize=function(){return this._pageSize},e.FilmStripPagingModel.prototype.getPage=function(){return this._page},e.FilmStripPagingModel.prototype.setPage=function(e,t){e=parseInt(e,10);try{var i=this.getPageCount(),s=this._page,n=this._pageSize,r=n;if(t&&t.pageSize&&(r=t.pageSize),0===this._totalSize&&-1===r)return Promise.resolve();var a=Math.ceil(this._totalSize/r);if(e<0||e>a-1)throw new Error("JET FilmStrip: Invalid 'page' set: "+e);var o=!1;if(e!=s||r!=n){if(!1===this.handleEvent("beforePage",{page:e,previousPage:s}))return Promise.reject();o=!0}this._page=e,this._pageSize=r;var l=this.getPageCount(),h=this;return new Promise(function(n,r){if(i!=l&&h.handleEvent("pageCount",{pageCount:l,previousPageCount:i}),o){var a={page:e,previousPage:s};t&&t.loopDirection&&(a.loopDirection=t.loopDirection),h.handleEvent("page",a)}n(null)})}catch(e){return Promise.reject(e)}},e.FilmStripPagingModel.prototype.getStartItemIndex=function(){return-1===this._page&&-1===this._pageSize?-1:this._page*this._pageSize},e.FilmStripPagingModel.prototype.getEndItemIndex=function(){return Math.min(this.getStartItemIndex()+this._pageSize,this._totalSize)-1},e.FilmStripPagingModel.prototype.getPageCount=function(){return Math.ceil(this._totalSize/this._pageSize)},e.FilmStripPagingModel.prototype.totalSize=function(){return this._totalSize},e.FilmStripPagingModel.prototype.totalSizeConfidence=function(){return"actual"},function(){e.__registerWidget("oj.ojFilmStrip",t.oj.baseComponent,{defaultElement:"
",widgetEventPrefix:"oj",options:{maxItemsPerPage:0,orientation:"horizontal",currentItem:{index:0},arrowPlacement:"adjacent",arrowVisibility:"auto",looping:"off"},_ComponentCreate:function(){this._super();var t=this.element;t.addClass("oj-filmstrip oj-component").attr("tabindex",0).attr("role","region"),t.uniqueId();var s=this.options;if(s.disabled&&e.Logger.warn(re),s.orientation!==v&&s.orientation!==te)throw new Error(d+s.orientation);if(s.arrowPlacement!==i&&s.arrowPlacement!==Q)throw new Error(g+s.arrowPlacement);if(s.arrowVisibility!==ie&&s.arrowVisibility!==m&&s.arrowVisibility!==P&&s.arrowVisibility!==n)throw new Error(p+s.arrowVisibility);if(s.looping!==X&&s.looping!==Y)throw new Error(c+s.looping);this.touchEventNamespace=this.eventNamespace+"Touch",this.mouseEventNamespace=this.eventNamespace+"Mouse",this.keyEventNamespace=this.eventNamespace+"Key",this.navArrowHoverableEventNamespace=this.eventNamespace+"NavArrowHoverable",s.currentItem=this._convertItemToObj(s.currentItem),this._setup(!0),this._populateItemObj(s.currentItem),this.option(b,s.currentItem,{_context:{internalSet:!0,writeback:!0}})},refresh:function(){this._super(),this._setup(!1)},getItemsPerPage:function(){return this._itemsPerPage},getPagingModel:function(){return this._pagingModel},_NotifyShown:function(){this._super(),this._needsSetup?this._setup(this._needsSetup[0]):this._handleResize()},_NotifyAttached:function(){this._super(),this._needsSetup?this._setup(this._needsSetup[0]):this._handleResize()},_setup:function(i){var s=this;if(i&&!this._pagingModel&&(this._pagingModel=new e.FilmStripPagingModel),i&&!this._filterNestedFilmStripsFunc&&(this._filterNestedFilmStripsFunc=function(e,i){return t(i).closest(".oj-filmstrip")[0]===s.element[0]}),!this._canCalculateSizes()){var n=!1;return this._needsSetup&&(n=this._needsSetup[0]),void(this._needsSetup=[i||n])}this._needsSetup=null,this._bRTL="rtl"===this._GetReadingDirection(),this._bTouchSupported=e.DomUtils.isTouchSupported();var r=this.element;i?(this._itemsPerPage=0,this._handlePageFunc=function(e){s._handlePage(e)},this._componentSize=0,this._itemSize=-1,this._handleTransitionEndFunc=function(e){s._handleTransitionEnd()},this._handleResizeFunc=function(e,t){s._handleResize()},this._bTouchSupported&&(this._handleTouchStartFunc=function(e){s._handleTouchStart(e)},this._handleTouchMoveFunc=function(e){s._handleTouchMove(e)},this._handleTouchEndFunc=function(e){s._handleTouchEnd(e)},this._addTouchListeners()),this._handleMouseDownFunc=function(e){s._handleMouseDown(e)},this._handleMouseMoveFunc=function(e){s._handleMouseMove(e)},this._handleMouseUpFunc=function(e){s._handleMouseUp(e)},this._addMouseListeners(),this._handleKeyDownFunc=function(e){s._handleKeyDown(e)},this._addKeyListeners()):this._destroyInternal();for(var a=r.children(),o=0;o
0){this._adjustSizes();for(o=0;o=h.getPageCount()))throw new Error(u+s)}switch(this._super(t,s,r),t){case b:l>-1&&l!=_&&h.setPage(l)}o&&this._setup(!1)},_handleResize:function(){if(this._busyStateResolveFunc)this._deferredHandleResize=!0;else if(this._bHandlingResize){if(!this._queuedHandleResize){var e=this;this._queuedHandleResize=setTimeout(function(){e._queuedHandleResize=null,e._handleResize()},0)}}else this._bHandlingResize=!0,this._adjustSizes(!0),this._bHandlingResize=!1},_isHorizontal:function(){return this.options.orientation!==te},_isLoopingPage:function(){return this.options.looping===Y},_getCssPositionAttr:function(){return this._isHorizontal()?this._bRTL?"right":"left":"top"},_getCssSizeAttr:function(){return this._isHorizontal()?"width":"height"},_canCalculateSizes:function(){var e=document.createElement("div"),t=e.style;t.position="absolute",t.width="10px",t.height="10px";var i=this.element[0];i.appendChild(e);var s=!1;try{s=e.offsetWidth>0&&e.offsetHeight>0}catch(e){}return i.removeChild(e),s},_wrapChildren:function(){var e=this.element,t=this._isHorizontal(),s=e.children();s.addClass(T).wrap("");var n=this._getCssPositionAttr(),r=e.children().wrapAll("").parent();this._pagesWrapper=r;var a=this.options;a.arrowVisibility!==m&&a.arrowPlacement===i&&(this._contentWrapper=r.wrap("").parent()),e.addClass(z),t||e.addClass(O);var o=this._createPageInfoElem(),l=e.attr("id"),h=o.attr("id");e.append(o),e.attr("aria-labelledby",l+" "+h),this._pageInfoElem=o,a.arrowVisibility!==m&&s.length>0&&(this._prevButton=this._createPrevNavArrow(),this._nextButton=this._createNextNavArrow(),this._navArrowsShownOnHover()&&this._setupNavArrowsHoverable())},_unwrapChildren:function(){var e=this.element,t=this._getItems();this._tearDownNavArrowsHoverable(),this._prevButton&&(this._UnregisterChildNode(this._prevButton),this._prevButton=null),this._nextButton&&(this._UnregisterChildNode(this._nextButton),this._nextButton=null);var i=e.children(Z+F);i&&i.remove(),this._pageInfoElem&&(this._UnregisterChildNode(this._pageInfoElem),this._pageInfoElem.remove(),this._pageInfoElem=null),t.removeClass(T).unwrap().unwrap(),this._pagesWrapper=null,this._contentWrapper&&(t.unwrap(),this._contentWrapper=null),e.removeClass(z+" "+O)},_createPageInfoElem:function(){var e=t(document.createElement("div"));return e.uniqueId(),e.addClass("oj-helper-hidden-accessible oj-filmstrip-liveregion"),e.attr({role:"region","aria-live":"polite","aria-atomic":"true"}),e},_updatePageInfoElem:function(){var e=this._pagingModel,t=e.getPage(),i=e.getPageCount(),s=le(this.getTranslatedString("labelAccFilmStrip",{pageIndex:t+1,pageCount:i})),n=this._pageInfoElem;n&&n.attr("aria-label",s)},_setupNavArrowsHoverable:function(){this.element.on("mouseenter"+this.navArrowHoverableEventNamespace,function(e){t(e.currentTarget).hasClass("oj-disabled")||t(e.currentTarget).addClass(M)}).on("mouseleave"+this.navArrowHoverableEventNamespace,function(e){t(e.currentTarget).removeClass(M)})},_tearDownNavArrowsHoverable:function(){this.element.off(this.navArrowHoverableEventNamespace)},_navArrowsShownOnHover:function(){var e=this.options,t=e.arrowVisibility;return t===P||t===n&&e.arrowPlacement===Q},_hasPrevPage:function(){return this._pagingModel.getPage()>0},_hasNextPage:function(){var e=this._pagingModel;return e.getPage()1&&e.setPage(t-1,{loopDirection:G})}},_nextPage:function(){var e=this._pagingModel;if(this._hasNextPage())e.setPage(e.getPage()+1);else{var t=e.getPageCount();this._isLoopingPage()&&t>1&&e.setPage(0,{loopDirection:J})}},_displayNavigationArrow:function(e,t){this.options.arrowPlacement===i?t.css("visibility",e?"":m):t.parent().css("display",e?"":S)},_updateNavigationArrowsDisplay:function(){if(this.options.arrowVisibility!==m){var e=this._pagingModel,t=e.getPage(),i=e.getPageCount(),s=this._isLoopingPage()&&i>1;this._displayNavigationArrow(s||0!==t,this._prevButton),this._displayNavigationArrow(s||t!==i-1,this._nextButton)}},_createPrevNavArrow:function(){var e=this.element,t=this._isHorizontal()?q:K,i=this._createNavigationArrowContainer(t);this.options.arrowPlacement===Q?e.append(i):e.prepend(i);var s=le(this.getTranslatedString("labelAccArrowPreviousPage")),n=le(this.getTranslatedString("tipArrowPreviousPage")),r=this._createNavigationArrow(i,t,s,n),a=this;return r.on("click",function(){a._prevPage()}),r},_createNextNavArrow:function(){var e=this.element,t=this._isHorizontal()?C:w,i=this._createNavigationArrowContainer(t);e.append(i);var s=le(this.getTranslatedString("labelAccArrowNextPage")),n=le(this.getTranslatedString("tipArrowNextPage")),r=this._createNavigationArrow(i,t,s,n),a=this;return r.on("click",function(){a._nextPage()}),r},_createNavigationArrowContainer:function(e){var i=t(document.createElement("div"));return i.addClass(F+" "+e),this.options.arrowPlacement===Q&&(i.addClass("oj-filmstrip-arrow-container-overlay"),this._navArrowsShownOnHover()&&i.addClass(I)),i},_createNavigationArrow:function(e,t,s,n){var r="
",e.append(r);var a=e.children(Z+y).eq(0);a.uniqueId();var o=a.attr("id");s&&a.attr("aria-label",s),n&&a.attr("title",n);var l=this._pageInfoElem.attr("id");return a.attr("aria-labelledby",l+" "+o),this._AddHoverable(a),this._AddActiveable(a),this.options.arrowPlacement===i&&this._navArrowsShownOnHover()&&a.addClass(I),a},_getItemContainers:function(){return this._pagesWrapper.find(Z+j).filter(this._filterNestedFilmStripsFunc)},_getItems:function(){return this._pagesWrapper.find(Z+T).filter(this._filterNestedFilmStripsFunc)},_getPages:function(){return this._pagesWrapper.children(Z+E)},_clearCalculatedSizes:function(){var e=this._pagesWrapper;this._getPages().css(_,h).css(ne,h),this._getItemContainers().css(_,h).css(ne,h),e.css(this._getCssSizeAttr(),h)},_adjustSizes:function(n){this._clearCalculatedSizes();var a=this.options,o=this._isHorizontal(),l=a.maxItemsPerPage,u=l<1,d=this.element,g=this._getItemContainers();if(this._itemSize<0){var p=this._getItemIndex(a.currentItem),c=t(g[p]),f=c.children(Z+T);f.css(r,h),e.Components.subtreeShown(f[0]),this._itemSize=o?c.width():c.height()}var v=o?d.width():d.height();if(a.arrowVisibility!==m&&a.arrowPlacement===i){var P=d.children(Z+F).eq(0);v-=2*(o?P.width():P.height())}if(this._componentSize=v,!u){var b=Math.max(Math.floor(v/this._itemSize),1);b0&&g.unwrap();for(N=0;N ")}if(n)for(N=0;N-1&&!u){var v=i>n;d&&s&&(v=s===J);var P=d&&!v&&h>1&&0==n,b=d&&v&&h>1&&n==h-1;m=!0,r.css(this._getCssSizeAttr(),2*this._componentSize),v||_&&r.css(p,-this._componentSize+$),v?(g.addClass(D),c.addClass(A),b&&c.addClass(W)):(g.addClass(L),c.addClass(H),P&&c.addClass(V))}if(this._busyStateResolveFunc=this._addBusyState("scrolling"),m){var S=this,w=this._bDragInit;if(w&&n<0)a.filter(se).addClass(x);setTimeout(function(){S._finishHandlePage(i,n,v,u,w)},25)}else this._finishHandlePage(i,n,v,u)},_finishHandlePage:function(e,i,s,n,r){var a=this._pagesWrapper;if(n||(this._bPageChangeTransition=!0,a.on("transitionend"+this.eventNamespace+" webkitTransitionEnd"+this.eventNamespace,this._handleTransitionEndFunc)),n)this._handleTransitionEnd();else{var o=this._getPages();if(r&&oe(o),i>-1){var l=t(o[i]),h=t(o[e]);l.addClass(x),h.addClass(x),s?(l.removeClass(D),h.removeClass(A),l.addClass(k),h.addClass(R)):(l.removeClass(L),h.removeClass(H),l.addClass(U),h.addClass(B))}else if(r){var u=o.filter(se);ae(u,"translate3d(0, 0, 0)")}}},_handleTransitionEnd:function(){this._bPageChangeTransition=!1;var i=this._pagesWrapper,s=this._getCssPositionAttr();i.off(this.eventNamespace).css(this._getCssSizeAttr(),this._componentSize).css(s,"0px");var n=null;(e.FocusUtils.containsFocus(i[0])||this._nextButton&&e.FocusUtils.containsFocus(this._nextButton[0])||this._prevButton&&e.FocusUtils.containsFocus(this._prevButton[0]))&&(n=document.activeElement);for(var r=this._pagingModel.getPage(),a=this._getPages(),o=0;o0&&r===t.id){i=n;break}}else null!=t.index&&t.index>=0&&t.index=0){var t=this._getItemIndex(e);if(e.index=t,null==e.id&&-1!==t){var i=this._getItems();e.id=i[t].id}}},_findPage:function(e,t){var i=this._getItemIndex(e),s=-1;return i>-1&&(void 0===t&&(t=this._itemsPerPage),s=Math.floor(i/t)),s},_getFirstItemOnPage:function(e,t,i){var s=this._pagingModel;if(void 0===t&&(t=s.getPageCount()),e>=0&&e-1&&r1){var a={};r==n&&(r=0,a.loopDirection=J),-1==r&&(r=n-1,a.loopDirection=G),i.setPage(r,a)}e.preventDefault()},_handleMouseDown:function(e){var t=e.originalEvent;this._dragScrollStart(t)},_handleMouseMove:function(e){var t=e.originalEvent;this._dragScrollMove(e,t)},_handleMouseUp:function(e){this._dragScrollEnd()},_handleTouchStart:function(e){var t=e.originalEvent.touches;if(1===t.length){var i=t[0];this._dragScrollStart(i)}},_handleTouchMove:function(e){var t=e.originalEvent.touches[0];this._dragScrollMove(e,t),(this._bTouch||this._scrolledForThisTouch)&&e.preventDefault()},_handleTouchEnd:function(e){this._dragScrollEnd()},_dragScrollStart:function(e){if(this._pagingModel.getPageCount()>1&&!this._bPageChangeTransition){this._bTouch=!0,this._bDragInit=!1,this._bFirstToLast=!1,this._bLastToFirst=!1;var t=this._isHorizontal();this._touchStartCoord=t?e.pageX:e.pageY,this._touchStartCoord2=t?e.pageY:e.pageX}},_initDragScroll:function(e,i,s){var n=this._isHorizontal();this._touchStartCoord=n?e.pageX:e.pageY,this._touchStartCoord2=n?e.pageY:e.pageX;var r=this._getCssPositionAttr(),a=this._pagesWrapper,o=this._pagingModel,l=o.getPage(),h=o.getPageCount(),u=this._getPages(),d=1;i||s?(i&&(this._unhidePage(t(u[h-1])),a.css(r,-this._componentSize+$),d++,t(u[h-1]).addClass(V)),s&&(this._unhidePage(t(u[0])),d++,t(u[0]).addClass(W))):(l>0&&(this._unhidePage(t(u[l-1])),a.css(r,-this._componentSize+$),d++),l1&&a.css(this._getCssSizeAttr(),d*this._componentSize),this._touchStartScroll=parseInt(a.css(r),10)},_dragScrollMove:function(e,i){if(this._bTouch){var s=this._isHorizontal(),n=(s?i.pageX:i.pageY)-this._touchStartCoord,r=(s?i.pageY:i.pageX)-this._touchStartCoord2,h=s&&this._bRTL?n>0:n<0,u=this._pagingModel,d=u.getPage(),g=u.getPageCount(),p=this._isLoopingPage(),c=p&&!h&&g>1&&0==d,_=p&&h&&g>1&&d==g-1;if(!this._bDragInit)return Math.abs(r)>Math.abs(n)&&(this._bTouch=!1,this._scrolledForThisTouch=!1),Math.abs(n)>a&&(this._initDragScroll(i,c,_),this._bDragInit=!0),this._bFirstToLast=c,void(this._bLastToFirst=_);if(c==this._bFirstToLast&&_==this._bLastToFirst||(this._dragScrollResetPages(),this._initDragScroll(i,c,_),this._bFirstToLast=c,this._bLastToFirst=_),h&&d0||p){var m=this.element[0],f=Math.min(o*(s?m.offsetWidth:m.offsetHeight),l),v=this._getCssPositionAttr(),P=this._pagesWrapper,b=this._getPages();if(Math.abs(n)>=f){var S,w,C={};if(c||_?(c?(S=g-1,w=g>2?1:-1):_&&(S=0,w=g>2?g-2:-1),C.loopDirection=h?J:G):(S=h?d+1:d-1,w=h?d-1:d+1),w>-1&&w-1&&!_){var y=parseInt(P.css(v),10);P.css(v,y+this._componentSize+$)}P.css(this._getCssSizeAttr(),2*this._componentSize),this._bTouch=!1,u.setPage(S,C)}else{var F=s?"translate3d("+n+"px, 0, 0)":"translate3d(0, "+n+"px, 0)";ae(b.filter(se),F)}this._scrolledForThisTouch=!0}this._scrolledForThisTouch&&(e.preventDefault(),e.stopPropagation())}},_dragScrollEnd:function(){if(this._bTouch&&this._bDragInit){var e=this._pagingModel.getPage();this._handlePage({previousPage:e,page:e})}this._bTouch=!1,this._bDragInit=!1,this._bFirstToLast=!1,this._bLastToFirst=!1,this._scrolledForThisTouch=!1},_dragScrollResetPages:function(){for(var e=this._pagesWrapper,i=this._getCssPositionAttr(),s=this._pagingModel,n=s.getPage(),r=s.getPageCount(),a=this._getPages(),o=0;o");return i.text(e),i[0].innerHTML}}(),i.extension._WIDGET_NAME="ojFilmStrip",e.CustomElementBridge.registerMetadata("oj-film-strip","baseComponent",i),e.CustomElementBridge.register("oj-film-strip",{metadata:e.CustomElementBridge.getMetadata("oj-film-strip")})});